package test3;

import java.io.*;//java.io.*是一个包，提供了基本的输入和输出的功能，包含了处理淑君输入和输出的类
import java.util.*;//同样为Java的一个包，其中*表示导入该包下的所有类

public class price {
	public static void main(String args[]) {
		try {
			File file = new File("C:\\Users\\24863\\Desktop\\price.txt");// 读取文件中的内容
			Scanner scanner = null;// 创建一个Scanner的对象，
			int count = 0;// 设置一个整型变量，来表示求和的个数
			double sum = 0;// 设置一个double型变量，来表示所有价格的总和
			scanner = new Scanner(file);// Scanner的对象被初始化来读取指定的文件file
			scanner.useDelimiter("[^0123456789.]+");// 从文本中提取所有的数字（包括整数和小数）
			while (scanner.hasNextDouble()) // 用于检查扫描器中的输入中是否有下一个标记可以解析为一个double的值，如果有返回true，否则返回false
			{
				double price = scanner.nextDouble();// 从输入中读取下一个标记，并尝试将其读取为一个double类型的值，如果可以成功读取，则返回这个值
				count++;// 每返回一次这个值，求和个数加一
				sum = sum + price;// 将所有读取的double类型的值相加
				System.out.println(price);// 每读取一个价格，则输出一个价格
			}
			double aver = sum / count;// 求价格的平均值
            System.out.println("平均价格：" + average+"\n");// 输出平均价格
			FileWriter f = new FileWriter("C:\\Users\\24863\\Desktop\\price.txt", true);//FileWriter是java.io中的一个类，它用于将字符数据写入到文件中，加上true表示不覆盖原有文件
			BufferedWriter fw = new BufferedWriter(f);//BufferedWriter是java.io中的一个类，它提供了缓冲的字符输出流，通常用来创建一个缓冲的字符输出流，将所有写入操作传递到指定的Writer对象
			String average = String.format("%.3f", aver);// aver表示将价格平均值取三位小数
			fw.write("    平均价格："+average);//将计算出的平均价格写入到读取的文件中
			fw.flush();//将缓冲区中的数据强制写入到目标文件中。缓冲区是内存中的一个区域，用来临时存储数据，知道缓冲区满了或者调用flush方法时，数据才会被实际写入到目的地。
			fw.close();//当完成写入操作之后，需要关闭BufferedWriter，确保所有缓冲的数据都被刷新到目的地，并且释放与之关联的系统资源，如果缓冲区的数据没有被刷新，可能会丢失数据
            scanner.close();//Scanner类被用来解析原始类型和字符串的简单文本扫描，通常用于从文件、字符串或者任何输入流中读取数据，在扫描之后要调用close方法来关闭扫描器，来避免潜在的资源泄露。
		} 
		catch (Exception exp)
		{
			System.out.println(exp);//如果出现问题，并不是输出简单的字符串，而是显示出现错误的地方
		}
	}
}



